import { getToken } from '@/utils/auth'
import store from '@/store'
import { isHandlingTokenExpired } from '@/utils/request'

// 登录页面
const loginPage = "/pages/login"
  
// 页面白名单
const whiteList = [
  '/pages/login', '/pages/register', '/pages/common/webview/index', '/pages/loginForPhone', '/pages/accountLogin'
]


// 检查地址白名单
function checkWhite(url) {
  const path = url.split('?')[0]
  return whiteList.indexOf(path) !== -1
}

// 检查登录状态并处理跳转
function checkLoginStatus(url) {
  // 如果正在处理token过期，直接返回
  console.log('store.state.user.isHandlingTokenExpired:>>>>>>>>', store.state.user.isHandlingTokenExpired);
  
  if (store.state.user.isHandlingTokenExpired) {
    return false
  }
  
	console.log('checkLoginStatus:>>>>>>>>', getToken());
	
  if (getToken()) {
    if (url === loginPage) {
      // 已登录时访问登录页，跳转至重定向页面或首页
      const redirectUrl = store.state.user.redirectPage || '/pages/index'
      console.log('重定向到:', redirectUrl)
      store.dispatch('SetRedirectPage', null) // 清除重定向页面
      uni.reLaunch({ url: redirectUrl })
      return false
    }
    // 如果用户信息为空，则获取用户信息
    if (!store.state.user.userInfo || Object.keys(store.state.user.userInfo).length === 0) {
      store.dispatch('GetInfo')
    }
    return true
  } else {
    if (checkWhite(url)) {
      return true
    }
    // 非白名单页面，保存完整的URL（包括查询参数）
    if (!store.state.user.redirectPage && url !== loginPage) {
      store.dispatch('SetRedirectPage', url)
    }
    console.log('保存重定向页面:', store.state.user.redirectPage)
    uni.reLaunch({ url: loginPage })
    return false
  }
}

// 页面跳转验证拦截器
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
list.forEach(item => {
  uni.addInterceptor(item, {
    invoke(to) {
      try {
        return checkLoginStatus(to.url)
      } catch (e) {
        console.log("报错: ", e)
      }
    },
    fail(err) {
      console.log(err)
    }
  })
})

// 修改页面初始化检查
const initPageCheck = () => {
  // 获取小程序启动时的参数
  const launchOptions = uni.getLaunchOptionsSync()
  console.log('launchOptions:>>>>>>>>', launchOptions)
  
  // 获取进入的页面路径并处理完整URL
  let path = launchOptions.path
  if (path) {
    // 确保路径以 / 开头
    path = path.startsWith('/') ? path : `/${path}`
    
    // 处理查询参数
    if (launchOptions.query && Object.keys(launchOptions.query).length > 0) {
		if (launchOptions.query.q) {
			const queryString = Object.entries(launchOptions.query)
        .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
        .join('&')
      path = `${path}?${queryString}`
	    console.log("path处理后的路径：", path);
		}
      
    }
    
    // 如果当前页面不是登录页，保存完整路径用于登录后跳转
    if (!checkWhite(path)) {
      store.dispatch('SetRedirectPage', path)
    }
    
    checkLoginStatus(path)
  } else {
    // 如果获取不到路径，默认检查首页
    if (!checkWhite('/pages/index')) {
      store.dispatch('SetRedirectPage', '/pages/index')
    }
    checkLoginStatus('/pages/index')
  }
}

// 导出生命周期函数供 App.vue 使用
export const onAppLaunch = () => {
  initPageCheck()
}

export const onAppShow = () => {
  initPageCheck()
}
